using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._GeostatisticalAnalystTools._Interpolation
{
    /// <summary>
    /// <para>Empirical Bayesian Kriging 3D</para>
    /// <para>Empirical Bayesian kriging 3D is a geostatistical interpolation method that uses Empirical Bayesian Kriging to interpolate 3D point data. All points must have x-, y-, and z-coordinates and a measured value to be interpolated. The output is a 3D geostatistical layer that calculates and renders itself as a 2D transect at a given elevation. The elevation of the layer can be changed with the range slider, and the layer will update to show the interpolated predictions for the new elevation.</para>
    /// <para>经验贝叶斯克里金法 3D 是一种地统计插值方法，它使用经验贝叶斯克里法对 3D 点数据进行插值。所有点都必须具有 x、y 和 z 坐标以及要插值的测量值。输出是一个 3D 地统计图层，该图层在给定高程处计算并渲染为二维样带。可以使用范围滑块更改图层的高程，并且图层将更新以显示新高程的插值预测。</para>
    /// </summary>    
    [DisplayName("Empirical Bayesian Kriging 3D")]
    public class EmpiricalBayesianKriging3D : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public EmpiricalBayesianKriging3D()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input features</para>
        /// <para>The input point features containing the field that will be interpolated.</para>
        /// <para>包含将要插值的字段的输入点要素。</para>
        /// </param>
        /// <param name="_elevation_field">
        /// <para>Elevation field</para>
        /// <para><xdoc>
        ///   <para>The Input features field containing the elevation value of each input point.</para>
        ///   <para>If the elevation values are stored as geometry attributes in Shape.Z, it is recommended that you use that field. If the elevation values are stored in an attribute field, the elevation values must indicate distance from sea level. Positive values indicate distance above sea level, and negative values indicate distance below sea level.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输入要素字段包含每个输入点的高程值。</para>
        ///   <para>如果高程值在 Shape.Z 中存储为几何属性，则建议您使用该字段。如果高程值存储在属性字段中，则高程值必须指示与海平面的距离。正值表示海平面以上距离，负值表示海平面以下距离。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_value_field">
        /// <para>Value field</para>
        /// <para>The Input features field containing the measured values that will be interpolated.</para>
        /// <para>输入要素字段包含将要插值的测量值。</para>
        /// </param>
        /// <param name="_out_ga_layer">
        /// <para>Output geostatistical layer</para>
        /// <para>The output geostatistical layer that will display the interpolation result.</para>
        /// <para>将显示插值结果的输出地统计图层。</para>
        /// </param>
        public EmpiricalBayesianKriging3D(object _in_features, object _elevation_field, object _value_field, object _out_ga_layer)
        {
            this._in_features = _in_features;
            this._elevation_field = _elevation_field;
            this._value_field = _value_field;
            this._out_ga_layer = _out_ga_layer;
        }
        public override string ToolboxName => "Geostatistical Analyst Tools";

        public override string ToolName => "Empirical Bayesian Kriging 3D";

        public override string CallName => "ga.EmpiricalBayesianKriging3D";

        public override List<string> AcceptEnvironments => ["coincidentPoints", "extent", "parallelProcessingFactor"];

        public override object[] ParameterInfo => [_in_features, _elevation_field, _value_field, _out_ga_layer, _elevation_units.GetGPValue(), _measurement_error_field, _semivariogram_model_type.GetGPValue(), _transformation_type.GetGPValue(), _subset_size, _overlap_factor, _number_simulations, _trend_removal.GetGPValue(), _elev_inflation_factor, _search_neighborhood, _output_elevation, _output_type.GetGPValue(), _quantile_value, _threshold_type.GetGPValue(), _probability_threshold];

        /// <summary>
        /// <para>Input features</para>
        /// <para>The input point features containing the field that will be interpolated.</para>
        /// <para>包含将要插值的字段的输入点要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Elevation field</para>
        /// <para><xdoc>
        ///   <para>The Input features field containing the elevation value of each input point.</para>
        ///   <para>If the elevation values are stored as geometry attributes in Shape.Z, it is recommended that you use that field. If the elevation values are stored in an attribute field, the elevation values must indicate distance from sea level. Positive values indicate distance above sea level, and negative values indicate distance below sea level.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输入要素字段包含每个输入点的高程值。</para>
        ///   <para>如果高程值在 Shape.Z 中存储为几何属性，则建议您使用该字段。如果高程值存储在属性字段中，则高程值必须指示与海平面的距离。正值表示海平面以上距离，负值表示海平面以下距离。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Elevation field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _elevation_field { get; set; }


        /// <summary>
        /// <para>Value field</para>
        /// <para>The Input features field containing the measured values that will be interpolated.</para>
        /// <para>输入要素字段包含将要插值的测量值。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Value field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _value_field { get; set; }


        /// <summary>
        /// <para>Output geostatistical layer</para>
        /// <para>The output geostatistical layer that will display the interpolation result.</para>
        /// <para>将显示插值结果的输出地统计图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output geostatistical layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_ga_layer { get; set; }


        /// <summary>
        /// <para>Elevation field units</para>
        /// <para><xdoc>
        ///   <para>The units of the Elevation field.</para>
        ///   <para>If Shape.Z is provided as the elevation field, the units will automatically match the z-units of the vertical coordinate system.</para>
        ///   <bulletList>
        ///     <bullet_item>Inch—Elevations are in inches.</bullet_item><para/>
        ///     <bullet_item>Foot—Elevations are in feet.</bullet_item><para/>
        ///     <bullet_item>Yard—Elevations are in yards.</bullet_item><para/>
        ///     <bullet_item>US mile—Elevations are in US miles.</bullet_item><para/>
        ///     <bullet_item>Nautical mile—Elevations are in nautical miles.</bullet_item><para/>
        ///     <bullet_item>Millimeter—Elevations are in millimeters.</bullet_item><para/>
        ///     <bullet_item>Centimeter—Elevations are in centimeters.</bullet_item><para/>
        ///     <bullet_item>Decimeter—Elevations are in decimeters.</bullet_item><para/>
        ///     <bullet_item>Meter—Elevations are in meters.</bullet_item><para/>
        ///     <bullet_item>Kilometer—Elevations are in kilometers.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>高程字段的单位。</para>
        ///   <para>如果将 Shape.Z 作为高程字段提供，则单位将自动与垂直坐标系的 z 单位匹配。</para>
        ///   <bulletList>
        ///     <bullet_item>英寸 - 高程以英寸为单位。</bullet_item><para/>
        ///     <bullet_item>英尺 - 高程以英尺为单位。</bullet_item><para/>
        ///     <bullet_item>码 - 高程以码为单位。</bullet_item><para/>
        ///     <bullet_item>美英里—高程以美英里为单位。</bullet_item><para/>
        ///     <bullet_item>海里 - 高程以海里为单位。</bullet_item><para/>
        ///     <bullet_item>毫米—高程以毫米为单位。</bullet_item><para/>
        ///     <bullet_item>厘米 - 高程以厘米为单位。</bullet_item><para/>
        ///     <bullet_item>分米 - 高程以分米为单位。</bullet_item><para/>
        ///     <bullet_item>米 - 高程以米为单位。</bullet_item><para/>
        ///     <bullet_item>千米 - 高程以千米为单位。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Elevation field units")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _elevation_units_value _elevation_units { get; set; } = _elevation_units_value._METER;

        public enum _elevation_units_value
        {
            /// <summary>
            /// <para>Inch</para>
            /// <para>Inch—Elevations are in inches.</para>
            /// <para>英寸 - 高程以英寸为单位。</para>
            /// </summary>
            [Description("Inch")]
            [GPEnumValue("INCH")]
            _INCH,

            /// <summary>
            /// <para>Foot</para>
            /// <para>Foot—Elevations are in feet.</para>
            /// <para>英尺 - 高程以英尺为单位。</para>
            /// </summary>
            [Description("Foot")]
            [GPEnumValue("FOOT")]
            _FOOT,

            /// <summary>
            /// <para>Yard</para>
            /// <para>Yard—Elevations are in yards.</para>
            /// <para>码 - 高程以码为单位。</para>
            /// </summary>
            [Description("Yard")]
            [GPEnumValue("YARD")]
            _YARD,

            /// <summary>
            /// <para>US mile</para>
            /// <para>US mile—Elevations are in US miles.</para>
            /// <para>美英里—高程以美英里为单位。</para>
            /// </summary>
            [Description("US mile")]
            [GPEnumValue("MILE_US")]
            _MILE_US,

            /// <summary>
            /// <para>Nautical mile</para>
            /// <para>Nautical mile—Elevations are in nautical miles.</para>
            /// <para>海里 - 高程以海里为单位。</para>
            /// </summary>
            [Description("Nautical mile")]
            [GPEnumValue("NAUTICAL_MILE")]
            _NAUTICAL_MILE,

            /// <summary>
            /// <para>Millimeter</para>
            /// <para>Millimeter—Elevations are in millimeters.</para>
            /// <para>毫米—高程以毫米为单位。</para>
            /// </summary>
            [Description("Millimeter")]
            [GPEnumValue("MILLIMETER")]
            _MILLIMETER,

            /// <summary>
            /// <para>Centimeter</para>
            /// <para>Centimeter—Elevations are in centimeters.</para>
            /// <para>厘米 - 高程以厘米为单位。</para>
            /// </summary>
            [Description("Centimeter")]
            [GPEnumValue("CENTIMETER")]
            _CENTIMETER,

            /// <summary>
            /// <para>Decimeter</para>
            /// <para>Decimeter—Elevations are in decimeters.</para>
            /// <para>分米 - 高程以分米为单位。</para>
            /// </summary>
            [Description("Decimeter")]
            [GPEnumValue("DECIMETER")]
            _DECIMETER,

            /// <summary>
            /// <para>Meter</para>
            /// <para>Meter—Elevations are in meters.</para>
            /// <para>米 - 高程以米为单位。</para>
            /// </summary>
            [Description("Meter")]
            [GPEnumValue("METER")]
            _METER,

            /// <summary>
            /// <para>Kilometer</para>
            /// <para>Kilometer—Elevations are in kilometers.</para>
            /// <para>千米 - 高程以千米为单位。</para>
            /// </summary>
            [Description("Kilometer")]
            [GPEnumValue("KILOMETER")]
            _KILOMETER,

        }

        /// <summary>
        /// <para>Measurement error field</para>
        /// <para><xdoc>
        ///   <para>Specifies the measurement error for each point in the input features. For each point, the value of this field should correspond to one standard deviation of the measured value of the point. Use this field if the measurement error values are not the same at each point.</para>
        ///   <para>A common source of nonconstant measurement error is when the data is measured with different devices. One device may be more precise than another, which means that it will have a smaller measurement error. For example, a thermometer rounds to the nearest degree and another thermometer rounds to the nearest tenth of a degree. The variability of measurements is often provided by the manufacturer of the measuring device, or it may be known from empirical practice.</para>
        ///   <para>Leave this parameter empty if there are no measurement error values or the measurement error values are unknown.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定输入要素中每个点的测量误差。对于每个点，此字段的值应对应于该点测量值的一个标准差。如果每个点的测量误差值都不相同，请使用此字段。</para>
        ///   <para>非恒定测量误差的一个常见来源是使用不同的设备测量数据。一个设备可能比另一个设备更精确，这意味着它的测量误差更小。例如，一个温度计四舍五入到最接近的度数，另一个温度计四舍五入到最接近的十分之一度。测量的可变性通常由测量设备的制造商提供，或者可以从经验实践中知道。</para>
        ///   <para>如果没有测量误差值或测量误差值未知，则将此参数留空。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Measurement error field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _measurement_error_field { get; set; } = null;


        /// <summary>
        /// <para>Semivariogram model type</para>
        /// <para><xdoc>
        ///   <para>The semivariogram model that will be used for the interpolation.</para>
        ///   <bulletList>
        ///     <bullet_item>Power—Power semivariogram</bullet_item><para/>
        ///     <bullet_item>Linear—Linear semivariogram</bullet_item><para/>
        ///     <bullet_item>Thin Plate Spline—Thin plate spline semivariogram</bullet_item><para/>
        ///     <bullet_item>Exponential—Exponential semivariogram</bullet_item><para/>
        ///     <bullet_item>Whittle—Whittle semivariogram</bullet_item><para/>
        ///     <bullet_item>K-Bessel—K-Bessel semivariogram</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将用于插值的半变异函数模型。</para>
        ///   <bulletList>
        ///     <bullet_item>幂 - 幂半变异函数</bullet_item><para/>
        ///     <bullet_item>线性 （Linear） - 线性半变异函数</bullet_item><para/>
        ///     <bullet_item>薄板样条曲线 （Thin Plate Spline） - 薄板样条半变异函数</bullet_item><para/>
        ///     <bullet_item>指数 - 指数半变异函数</bullet_item><para/>
        ///     <bullet_item>Whittle—Whittle 半变异函数</bullet_item><para/>
        ///     <bullet_item>K-贝塞尔—K-贝塞尔半变异函数</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Semivariogram model type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _semivariogram_model_type_value _semivariogram_model_type { get; set; } = _semivariogram_model_type_value._POWER;

        public enum _semivariogram_model_type_value
        {
            /// <summary>
            /// <para>Power</para>
            /// <para>Power—Power semivariogram</para>
            /// <para>幂 - 幂半变异函数</para>
            /// </summary>
            [Description("Power")]
            [GPEnumValue("POWER")]
            _POWER,

            /// <summary>
            /// <para>Linear</para>
            /// <para>Linear—Linear semivariogram</para>
            /// <para>线性 （Linear） - 线性半变异函数</para>
            /// </summary>
            [Description("Linear")]
            [GPEnumValue("LINEAR")]
            _LINEAR,

            /// <summary>
            /// <para>Thin Plate Spline</para>
            /// <para>Thin Plate Spline—Thin plate spline semivariogram</para>
            /// <para>薄板样条曲线 （Thin Plate Spline） - 薄板样条半变异函数</para>
            /// </summary>
            [Description("Thin Plate Spline")]
            [GPEnumValue("THIN_PLATE_SPLINE")]
            _THIN_PLATE_SPLINE,

            /// <summary>
            /// <para>Exponential</para>
            /// <para>Exponential—Exponential semivariogram</para>
            /// <para>指数 - 指数半变异函数</para>
            /// </summary>
            [Description("Exponential")]
            [GPEnumValue("EXPONENTIAL")]
            _EXPONENTIAL,

            /// <summary>
            /// <para>Whittle</para>
            /// <para>Whittle—Whittle semivariogram</para>
            /// <para>Whittle—Whittle 半变异函数</para>
            /// </summary>
            [Description("Whittle")]
            [GPEnumValue("WHITTLE")]
            _WHITTLE,

            /// <summary>
            /// <para>K-Bessel</para>
            /// <para>K-Bessel—K-Bessel semivariogram</para>
            /// <para>K-贝塞尔—K-贝塞尔半变异函数</para>
            /// </summary>
            [Description("K-Bessel")]
            [GPEnumValue("K_BESSEL")]
            _K_BESSEL,

        }

        /// <summary>
        /// <para>Transformation type</para>
        /// <para><xdoc>
        ///   <para>The type of transformation to be applied to the input features.</para>
        ///   <bulletList>
        ///     <bullet_item>None—Do not apply any transformation. This is the default.</bullet_item><para/>
        ///     <bullet_item>Empirical—Multiplicative Skewing transformation with Empirical base function is applied.</bullet_item><para/>
        ///     <bullet_item>Log empirical—Multiplicative Skewing transformation with Log Empirical base function is applied. All data values must be positive. If this option is chosen, all predictions will be positive.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要应用于输入要素的转换类型。</para>
        ///   <bulletList>
        ///     <bullet_item>无 （None） - 不应用任何变换。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>经验 - 应用具有经验基函数的乘法倾斜变换。</bullet_item><para/>
        ///     <bullet_item>对数经验 - 应用具有对数经验基函数的乘法倾斜变换。所有数据值必须为正数。如果选择此选项，则所有预测都将为正数。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Transformation type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _transformation_type_value _transformation_type { get; set; } = _transformation_type_value._NONE;

        public enum _transformation_type_value
        {
            /// <summary>
            /// <para>None</para>
            /// <para>None—Do not apply any transformation. This is the default.</para>
            /// <para>无 （None） - 不应用任何变换。这是默认设置。</para>
            /// </summary>
            [Description("None")]
            [GPEnumValue("NONE")]
            _NONE,

            /// <summary>
            /// <para>Empirical</para>
            /// <para>Empirical—Multiplicative Skewing transformation with Empirical base function is applied.</para>
            /// <para>经验 - 应用具有经验基函数的乘法倾斜变换。</para>
            /// </summary>
            [Description("Empirical")]
            [GPEnumValue("EMPIRICAL")]
            _EMPIRICAL,

            /// <summary>
            /// <para>Log empirical</para>
            /// <para>Log empirical—Multiplicative Skewing transformation with Log Empirical base function is applied. All data values must be positive. If this option is chosen, all predictions will be positive.</para>
            /// <para>对数经验 - 应用具有对数经验基函数的乘法倾斜变换。所有数据值必须为正数。如果选择此选项，则所有预测都将为正数。</para>
            /// </summary>
            [Description("Log empirical")]
            [GPEnumValue("LOGEMPIRICAL")]
            _LOGEMPIRICAL,

        }

        /// <summary>
        /// <para>Subset size</para>
        /// <para>The size of the subset. The input data will automatically be divided into subsets before processing. This parameter controls the number of points that will be in each subset.</para>
        /// <para>子集的大小。输入数据在处理前将自动划分为子集。此参数控制每个子集中的点数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Subset size")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _subset_size { get; set; } = 100;


        /// <summary>
        /// <para>Local model area overlap factor</para>
        /// <para><xdoc>
        ///   <para>A factor representing the degree of overlap between local models (also called subsets).</para>
        ///   <para>Each input point can fall into several subsets, and the overlap factor specifies the average number of subsets into which each point will fall. A high value of the overlap factor produces a smoother output surface, but it also increases processing time. Values must be between 1 and 5. The actual overlap that will be used will usually be larger than this value, so each subset will contain the same number of points.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>表示局部模型（也称为子集）之间重叠程度的因子。</para>
        ///   <para>每个输入点可以分为多个子集，重叠因子指定每个点将落入的子集的平均数。重叠因子值越高，输出表面越平滑，但也会增加处理时间。值必须介于 1 和 5 之间。将使用的实际重叠通常大于此值，因此每个子集将包含相同数量的点。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Local model area overlap factor")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _overlap_factor { get; set; } = 1;


        /// <summary>
        /// <para>Number of simulated semivariograms</para>
        /// <para><xdoc>
        ///   <para>The number of simulated semivariograms of each local model.</para>
        ///   <para>Using more simulations will make the model calculations more stable, but the model will take longer to calculate.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>每个局部模型的模拟半变异函数数。</para>
        ///   <para>使用更多的模拟将使模型计算更加稳定，但模型的计算时间更长。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Number of simulated semivariograms")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _number_simulations { get; set; } = 100;


        /// <summary>
        /// <para>Order of trend removal</para>
        /// <para><xdoc>
        ///   <para>The order of trend removal in the vertical direction.</para>
        ///   <para>For most data in three dimensions, the values of the points change faster vertically than they do horizontally. Removing trend in the vertical direction will help alleviate this and stabilize calculations.</para>
        ///   <bulletList>
        ///     <bullet_item>None—Do not remove trend. This is the default.</bullet_item><para/>
        ///     <bullet_item>First order—Remove first order vertical trend.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>趋势在垂直方向上的移除顺序。</para>
        ///   <para>对于大多数三维数据，点的值在垂直方向上的变化速度比在水平方向上的变化速度快。消除垂直方向的趋势将有助于缓解这种情况并稳定计算。</para>
        ///   <bulletList>
        ///     <bullet_item>无 （None） - 不删除趋势。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>一阶 （First order） - 移除一阶垂直趋势。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Order of trend removal")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _trend_removal_value _trend_removal { get; set; } = _trend_removal_value._NONE;

        public enum _trend_removal_value
        {
            /// <summary>
            /// <para>None</para>
            /// <para>None—Do not remove trend. This is the default.</para>
            /// <para>无 （None） - 不删除趋势。这是默认设置。</para>
            /// </summary>
            [Description("None")]
            [GPEnumValue("NONE")]
            _NONE,

            /// <summary>
            /// <para>First order</para>
            /// <para>First order—Remove first order vertical trend.</para>
            /// <para>一阶 （First order） - 移除一阶垂直趋势。</para>
            /// </summary>
            [Description("First order")]
            [GPEnumValue("FIRST")]
            _FIRST,

        }

        /// <summary>
        /// <para>Elevation inflation factor</para>
        /// <para><xdoc>
        ///   <para>A constant value that is multiplied by the Elevation field value prior to subsetting and model estimation. For most data in three dimensions, the values of the points change faster vertically than they do horizontally, and this factor stretches the locations of the points such that one unit of distance vertically is statistically equivalent to one unit of distance horizontally. The locations of the points will be moved back to their original locations before returning the result of the interpolation. This correction is needed to accurately estimate the semivariogram model and for the Search neighborhood to use the correct neighbors. The elevation inflation factor is unitless and will provide the same results regardless of the units of the x-, y-, or z-coordinate of the input points.</para>
        ///   <para>If no value is provided for this parameter, one will be calculated at run time using maximum likelihood estimation. The value will be printed as a geoprocessing message. The value calculated at run time will be between 1 and 1000. However, you can type values between 0.01 and 1,000,000. If the calculated value is equal to 1 or 1000, you can provide values outside that range and choose a value based on cross validation.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>在子集和模型估计之前乘以高程字段值的常量值。对于三维中的大多数数据，点的值在垂直方向上的变化速度比在水平方向上的变化速度快，并且此因子拉伸了点的位置，使得垂直距离的一个单位在统计上等于水平方向上的一个距离单位。在返回插值结果之前，点的位置将移回其原始位置。需要进行此校正才能准确估计半变异函数模型，并使搜索邻域使用正确的邻域。高程膨胀因子是无单位的，无论输入点的 x、y 或 z 坐标的单位如何，都将提供相同的结果。</para>
        ///   <para>如果未为此参数提供任何值，则将在运行时使用最大似然估计计算一个值。该值将打印为地理处理消息。在运行时计算的值将介于 1 和 1000 之间。但是，您可以键入介于 0.01 和 1,000,000 之间的值。如果计算值等于 1 或 1000，则可以提供超出该范围的值，并根据交叉验证选择一个值。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Elevation inflation factor")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _elev_inflation_factor { get; set; } = null;


        /// <summary>
        /// <para>Search neighborhood</para>
        /// <para><xdoc>
        ///   <para>Specifies the number and orientation of the neighbors that will be used to predict values at new locations.</para>
        ///   <para>Standard3D</para>
        ///   <bulletList>
        ///     <bullet_item>Max neighbors—The maximum number of neighbors per sector that will be used to estimate the value at the unknown location.</bullet_item><para/>
        ///     <bullet_item>Min neighbors—The minimum number of neighbors per sector that will be used to estimate the value at the unknown location.</bullet_item><para/>
        ///     <bullet_item>Sector type—The geometry of the 3D neighborhood. Sectors are used to ensure that neighbors are used in every direction around the prediction location. All sector types are formed from the Platonic solids.
        ///     <bulletList>
        ///       <bullet_item>1 Sector (Sphere)—The closest neighbors from any direction will be used.  </bullet_item><para/>
        ///       <bullet_item>4 Sector (Tetrahedron)—Divides space into four regions, and neighbors will be used in each of the four regions.  </bullet_item><para/>
        ///       <bullet_item>6 Sector (Cube)—Divides space into six regions, and neighbors will be used in each of the six regions.  </bullet_item><para/>
        ///       <bullet_item>8 Sector (Octahedron)—Divides space into eight regions, and neighbors will be used in each of the eight regions.  </bullet_item><para/>
        ///       <bullet_item>12 Sector (Dodecahedron)—Divides space into twelve regions, and neighbors will be used in each of the twelve regions.  </bullet_item><para/>
        ///       <bullet_item>20 Sector (Icosahedron)—Divides space into twenty regions, and neighbors will be used in each of the twenty regions.  </bullet_item><para/>
        ///     </bulletList>
        ///     </bullet_item><para/>
        ///     <bullet_item>Radius—The length of the radius of the search neighborhood.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将用于预测新位置值的相邻节点的数量和方向。</para>
        ///   <para>标准3D</para>
        ///   <bulletList>
        ///     <bullet_item>最大邻居数 - 每个扇区的最大邻居数，用于估计未知位置的值。</bullet_item><para/>
        ///     <bullet_item>最小邻居数 - 每个扇区的最小邻居数，用于估计未知位置的值。</bullet_item><para/>
        /// <bullet_item>扇区类型 - 3D 邻域的几何。扇区用于确保在预测位置周围的每个方向上使用邻居。所有扇区类型都是由柏拉图固体形成的。
        ///     <bulletList>
        ///       <bullet_item>1 扇区（球体）—将使用来自任何方向的最近邻居。</bullet_item><para/>
        ///       <bullet_item>4 扇区（四面体）- 将空间划分为四个区域，四个区域中的每一个区域都将使用邻居。</bullet_item><para/>
        ///       <bullet_item>6 扇区（立方体）- 将空间划分为六个区域，六个区域中的每一个区域都将使用邻居。</bullet_item><para/>
        ///       <bullet_item>8 扇区（八面体）- 将空间划分为 8 个区域，8 个区域中的每一个区域都将使用邻居。</bullet_item><para/>
        ///       <bullet_item>12 扇区（十二面体）- 将空间划分为 12 个区域，12 个区域中的每一个区域都将使用邻居。</bullet_item><para/>
        ///       <bullet_item>20 扇区（二十面体）- 将空间划分为 20 个区域，20 个区域中的每一个区域都将使用邻居。</bullet_item><para/>
        ///     </bulletList>
        ///     </bullet_item><para/>
        ///     <bullet_item>半径 - 搜索邻域半径的长度。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Search neighborhood")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _search_neighborhood { get; set; } = null;


        /// <summary>
        /// <para>Default output elevation</para>
        /// <para><xdoc>
        ///   <para>The default elevation of the Output geostatistical layer.</para>
        ///   <para>The geostatistical layer will always draw as a horizontal surface at a given elevation, and this parameter specifies this elevation. After it's created, the elevation of the geostatistical layer can be changed using the range slider.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输出地统计图层的默认高程。</para>
        ///   <para>地统计图层将始终绘制为给定高程处的水平表面，并且此参数指定此高程。创建后，可以使用范围滑块更改地统计图层的高程。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Default output elevation")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _output_elevation { get; set; } = null;


        /// <summary>
        /// <para>Output surface type</para>
        /// <para><xdoc>
        ///   <para>Surface type to store the interpolation results.</para>
        ///   <bulletList>
        ///     <bullet_item>Prediction—Prediction surfaces are produced from the interpolated values.</bullet_item><para/>
        ///     <bullet_item>Standard error of prediction— Standard Error surfaces are produced from the standard errors of the interpolated values.</bullet_item><para/>
        ///     <bullet_item>Probability—Probability surface of values exceeding or not exceeding a certain threshold.</bullet_item><para/>
        ///     <bullet_item>Quantile—Quantile surface predicting the specified quantile of the prediction distribution.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>用于存储插值结果的曲面类型。</para>
        ///   <bulletList>
        ///     <bullet_item>预测 - 根据插值生成预测曲面。</bullet_item><para/>
        ///     <bullet_item>预测标准误差 - 标准误差曲面由插值的标准误差生成。</bullet_item><para/>
        ///     <bullet_item>概率 - 超过或不超过特定阈值的值的概率曲面。</bullet_item><para/>
        ///     <bullet_item>分位数 - 预测预测分布的指定分位数的分位数曲面。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output surface type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _output_type_value _output_type { get; set; } = _output_type_value._PREDICTION;

        public enum _output_type_value
        {
            /// <summary>
            /// <para>Prediction</para>
            /// <para>Prediction—Prediction surfaces are produced from the interpolated values.</para>
            /// <para>预测 - 根据插值生成预测曲面。</para>
            /// </summary>
            [Description("Prediction")]
            [GPEnumValue("PREDICTION")]
            _PREDICTION,

            /// <summary>
            /// <para>Standard error of prediction</para>
            /// <para>Standard error of prediction— Standard Error surfaces are produced from the standard errors of the interpolated values.</para>
            /// <para>预测标准误差 - 标准误差曲面由插值的标准误差生成。</para>
            /// </summary>
            [Description("Standard error of prediction")]
            [GPEnumValue("PREDICTION_STANDARD_ERROR")]
            _PREDICTION_STANDARD_ERROR,

            /// <summary>
            /// <para>Probability</para>
            /// <para>Probability—Probability surface of values exceeding or not exceeding a certain threshold.</para>
            /// <para>概率 - 超过或不超过特定阈值的值的概率曲面。</para>
            /// </summary>
            [Description("Probability")]
            [GPEnumValue("PROBABILITY")]
            _PROBABILITY,

            /// <summary>
            /// <para>Quantile</para>
            /// <para>Quantile—Quantile surface predicting the specified quantile of the prediction distribution.</para>
            /// <para>分位数 - 预测预测分布的指定分位数的分位数曲面。</para>
            /// </summary>
            [Description("Quantile")]
            [GPEnumValue("QUANTILE")]
            _QUANTILE,

        }

        /// <summary>
        /// <para>Quantile value</para>
        /// <para>The quantile value for which the output layer will be generated.</para>
        /// <para>将为其生成输出层的分位数值。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Quantile value")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _quantile_value { get; set; } = 0.5;


        /// <summary>
        /// <para>Probability threshold type</para>
        /// <para><xdoc>
        ///   <para>Specifies whether to calculate the probability of exceeding or not exceeding the specified threshold.</para>
        ///   <bulletList>
        ///     <bullet_item>Exceed—Probability values exceed the threshold. This is the default.</bullet_item><para/>
        ///     <bullet_item>Not exceed—Probability values will not exceed the threshold.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否计算超过或不超过指定阈值的概率。</para>
        ///   <bulletList>
        ///     <bullet_item>超出 - 概率值超过阈值。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未超过—概率值不会超过阈值。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Probability threshold type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _threshold_type_value _threshold_type { get; set; } = _threshold_type_value._EXCEED;

        public enum _threshold_type_value
        {
            /// <summary>
            /// <para>Exceed</para>
            /// <para>Exceed—Probability values exceed the threshold. This is the default.</para>
            /// <para>超出 - 概率值超过阈值。这是默认设置。</para>
            /// </summary>
            [Description("Exceed")]
            [GPEnumValue("EXCEED")]
            _EXCEED,

            /// <summary>
            /// <para>Not exceed</para>
            /// <para>Not exceed—Probability values will not exceed the threshold.</para>
            /// <para>未超过—概率值不会超过阈值。</para>
            /// </summary>
            [Description("Not exceed")]
            [GPEnumValue("NOT_EXCEED")]
            _NOT_EXCEED,

        }

        /// <summary>
        /// <para>Probability threshold</para>
        /// <para>The probability threshold value. If left empty, the median (50th quantile) of the input data will be used.</para>
        /// <para>概率阈值。如果留空，则将使用输入数据的中位数（第 50 个分位数）。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Probability threshold")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _probability_threshold { get; set; } = null;


        public EmpiricalBayesianKriging3D SetEnv(object coincidentPoints = null, object extent = null, object parallelProcessingFactor = null)
        {
            base.SetEnv(coincidentPoints: coincidentPoints, extent: extent, parallelProcessingFactor: parallelProcessingFactor);
            return this;
        }

    }

}